#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
  pid_t p1, p2, p3, p4;
  p1 = fork();
  if (p1 > 0) // 父进程
  {
    printf("parent: 进程号: %d 父进程号:%d 进程组号:%d \n", getpid(), getppid(), getpgrp());
    p2 = fork();
    if (p2 > 0) // 父进程
    {
    }
    else if (p2 == 0) // 子进程
    {
      printf("child: 进程号: %d 父进程号:%d 进程组号:%d \n", getpid(), getppid(), getpgrp());
      exit(1);
    }
    else
    {
      perror("创建二号子进程失败");
    }

    // 等待子进程结束,父进程才结束
    int s1, s2;
    p3 = wait(&s1);
    p4 = wait(&s2);
    if (p3 < 0 || p4 < 0) // 没有等待到子进程返回
    {
      perror("wait error");
    }
  }
  else if (p1 == 0) // 子进程
  {
    printf("child: 进程号: %d 父进程号:%d 进程组号:%d \n", getpid(), getppid(), getpgrp());
    exit(1);
  }
  else
  {
    perror("创建1号子进程失败");
  }

  return 0;
}
